package com.wn.date20190805;

/**
 * 
 * @author song
 *
 */

public class ArrayMethod
{

	/**
	 * 判断一个整数是否再一个整数数组中
	 * 
	 * @param num 整数
	 * @param arr 整型数组
	 * @return 整数在数组中，返回true，否则false
	 */
	public boolean isInArray(int num, int[] arr)
	{
		// boolean isIn=true;
		if (arr == null)
			return false;
		for (int i = 0; i < arr.length; i++)
		{
			if (num == arr[i])
				return true;
		}
		return false;
	}

	/**
	 * 判断两个整数数组是否相等
	 * 
	 * @param a,整数数组
	 * @param b      整数数组
	 * @return 如果两个数组相等返回true，否则返回false
	 */
	public boolean isEquals(int[] a, int[] b)
	{
		if (a == null || b == null)
			return false;
		boolean flag = true;
		if (a.length == b.length)
		{
			for (int i = 0; i < a.length; i++)
			{
				if (a[i] != b[i])
				{
					flag = false;
					break;
				}
			}
		} else
		{
			flag = false;
		}
		return flag;
	}

	/**
	 * 计算两个整数数组之和，返回一个数组
	 * 
	 * @param a 整型数组
	 * @param b 整型数组
	 * @return 整型数组，如a,b为空，则返回空数组
	 */
	public int[] ArraySum(int[] a, int[] b)
	{
		if (a == null || b == null)
		{
			System.err.println("数组为空!");
			return new int[] {};
		}
		
		// 短的长度
		boolean IsAOverB = a.length > b.length;
		int minLength = IsAOverB ? b.length : a.length;
		int[] sum = new int[IsAOverB?a.length:b.length];// 为长的数组的长度
		for (int i = 0; i < minLength; i++)
		{
			sum[i] = a[i] + b[i];
		}
		for (int i = minLength; i < sum.length; i++)
		{
			if (IsAOverB)
			{
				sum[i] += a[i];
			} else
			{
				sum[i] += b[i];
			}

		}
		//会改变原数组!!!!!!
//		int[] sum=new int[IsAOverB?a.length:b.length];
//		sum=IsAOverB?a:b;
//		for(int i=0;i<minLength;i++)
//		{
//			sum[i]+=IsAOverB?b[i]:a[i];
//		}
		return sum;
	}

	/**
	 * 将一个数组倒置，会改变原来的数组
	 * 
	 * @param arr 整型数组
	 * 
	 */
	public void arrayReverse(int[] arr)
	{
		for (int i = 0; i < arr.length / 2; i++)
		{
			int temp = arr[i];
			arr[i] = arr[arr.length - 1 - i];
			arr[arr.length - 1 - i] = temp;
		}
	}

	/**
	 * 计算两个整型数组，合并为一个升序数组中的中位数
	 * 
	 * @param arr1 整型数组
	 * @param arr2 整型数组
	 * @return 为double型，如果有参数为空，返回0
	 */
	public double medianOfTwoArray(int[] arr1, int[] arr2)
	{
//		if(arr1==null||arr2==null)
//		{
//			System.out.println("\t参数数组为空");
//			return 0;
//		}
		try
		{
			int asc[] = new int[arr1.length + arr2.length];// 升序数组
			// arr1赋值给arrAsc
			for (int i = 0; i < arr1.length; i++)
			{
				asc[i] = arr1[i];
			}
			// arr2赋值给arrAsc
			for (int i = 0; i < arr2.length; i++)
			{
				asc[i + arr1.length] = arr2[i];// 从arr1长度开始
			}
			// 排序
			for (int i = 0; i < asc.length; i++)
			{
				for (int j = asc.length - 1; j > i; j--)
				{
					if (asc[i] > asc[j])
					{
						int temp = asc[i];
						asc[i] = asc[j];
						asc[j] = temp;
					}
				}
			}
			// 中位数
			double median;
			// 双数数组
			if (asc.length % 2 == 0)
			{
				median = (asc[asc.length / 2 - 1] + asc[asc.length / 2]) / 2;
			} else
			{
				median = asc[asc.length / 2];
			}
			return median;
		} catch (Exception e)
		{
			System.out.println("\n"+e.toString());
			return 0;
		}

	}
	

}
